package fixmodel.observable;
import java.util.ArrayList;

/**
 * 辅助类
 * 封装注册和通知的代码
 * 此类必须实现 QuackObservable,因为它们具有一组相同的方法.
 * QuackObservable会将这些方法的调用转给Observable的方法
 * @author yaojianfeng
 */
public class Observable implements QuackObservable {
    private ArrayList<Observer> observers = new ArrayList<>();
    private QuackObservable duck;

    /**
     * 在此构造器中,我们传进了QuackObservable
     * 当notifyObservers()调用时 观察者会把此对象传递过去 好让观察者知道是哪个对象在呱呱叫
     *
     * @param duck 鸭子观察者对象
     */
    public Observable(QuackObservable duck) {
        this.duck = duck;
    }

    /**
     * 注册方法
     *
     * @param observer 被观察者
     */
    @Override
    public void registerObserver(Observer observer) {
        observers.add(observer);
    }


    /**
     * 通知观察者
     */
    @Override
    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(duck);
        }
    }
}
